﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Data.SqlClient;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Data;
using System.IO;
using LMDB.LoggingService;
using System.Xml.Linq;

namespace LMDB
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        
       // private AndmebaasDataSet Klient = new AndmebaasDataSet();
        //
        //private SqlConnection andmebaas = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Reio\Andmebaas.mdf;Integrated Security=True;User Instance=True");
        private SqlConnection andmebaas = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Andmebaas.mdf;Integrated Security=True;User Instance=True");
        private AndmebaasDataSetTableAdapters.KlientTableAdapter klientadapter = new AndmebaasDataSetTableAdapters.KlientTableAdapter();
        private AndmebaasDataSetTableAdapters.FilmTableAdapter filmadapter = new AndmebaasDataSetTableAdapters.FilmTableAdapter();
        private AndmebaasDataSetTableAdapters.LaenutusTableAdapter laenutusadapter = new AndmebaasDataSetTableAdapters.LaenutusTableAdapter();
        private AndmebaasDataSetTableAdapters.StatAdapter stat = new AndmebaasDataSetTableAdapters.StatAdapter();
        private AndmebaasDataSetTableAdapters.TableAdapterManager manager = new AndmebaasDataSetTableAdapters.TableAdapterManager();
      
        public Window1()
        {
            InitializeComponent();
        }


        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
         
            RefreshData();
       
        }



        //string enimi = eesnimi.Text.ToString();
        //string pnimi = perenimi.Text.ToString();
        //string email = mail.Text.ToString();
        //string kliendi_id = id.Text.ToString();
        //string fnimi = filmi_nimi.Text.ToString();
        //string aasta = filmi_aasta.Text.ToString();
        //string zanr = filmi_zanr.Text.ToString();
        //string fid = filmi_id.Text.ToString();
  
        private void KuvaAndmed()
        {
            try
            {
                klientadapter.Connection = andmebaas;
                andmebaas.Open();

                DataTable dt = klientadapter.GetData();
                listView1.DataContext = dt.DefaultView;

                andmebaas.Close();
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Viga andmebaasiga, andmeid ei saa kuvada!", "Viga!");

                String src;
                String msg;
                src = "Source: " + ex.Source;
                msg = "Message: " + ex.Message;
                CLogger.WriteLog(ELogLevel.ERROR, src);
                CLogger.WriteLog(ELogLevel.ERROR, msg);
                CLogger.WriteLog(ELogLevel.ERROR, "Viga kliendiandmete kuvamisel.");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Viga kliendiandmete kuvamisel", "Viga");
                CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
            }
        }
        private void KuvaFilmid()
        {
            try
            {
                filmadapter.Connection = andmebaas;
                andmebaas.Open();

                DataTable dt = filmadapter.GetData();
                listView2.DataContext = dt.DefaultView;

                andmebaas.Close();
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Viga andmebaasiga, filme ei saa kuvada!", "Viga!");

                String src;
                String msg;
                src = "Source: " + ex.Source;
                msg = "Message: " + ex.Message;
                CLogger.WriteLog(ELogLevel.ERROR, src);
                CLogger.WriteLog(ELogLevel.ERROR, msg);
                CLogger.WriteLog(ELogLevel.ERROR, "Viga filmide kuvamisel.");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Viga filmide kuvamisel", "Viga");
                CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
            }
            //DataRowView IdRow;
            //int kid, klient;

            //kid = listView2.SelectedIndex;
            //IdRow = listView2.Items.GetItemAt(kid) as DataRowView;
            //klient = Convert.ToUInt16(IdRow["film_id"]);

            //andmebaas.Open();

          //  DataSet ds = new DataSet();
          //  SqlDataAdapter sqa = new SqlDataAdapter
           
          //("Select pic from Film where film_id='klient'", andmebaas);

          //  sqa.Fill(ds);
          //  andmebaas.Close();
           

          //  byte[] data = (byte[])ds.Tables[0].Rows[0][0];
          //  MemoryStream strm = new MemoryStream();

          //  strm.Write(data, 0, data.Length);
          //  strm.Position = 0;

          //  System.Drawing.Image img = System.Drawing.Image.FromStream(strm);

          //  BitmapImage bi = new BitmapImage();

          //  bi.BeginInit();

          //  MemoryStream ms = new MemoryStream();

          //  img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);

          //  ms.Seek(0, SeekOrigin.Begin);

          //  bi.StreamSource = ms;

          //  bi.EndInit();

          //  image1.Source = bi;



        }
        
        private void KuvaKlientView()
        {           
            try
            {
                klientadapter.Connection = andmebaas;
                andmebaas.Open();

                DataTable dt = klientadapter.GetKlientView();
                listView3.DataContext = dt.DefaultView;

                andmebaas.Close();
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Viga andmebaasiga, kliente ei saa kuvada!", "Viga!");

                String src;
                String msg;
                src = "Source: " + ex.Source;
                msg = "Message: " + ex.Message;
                CLogger.WriteLog(ELogLevel.ERROR, src);
                CLogger.WriteLog(ELogLevel.ERROR, msg);
                CLogger.WriteLog(ELogLevel.ERROR, "Viga kliendiandmete kuvamisega.");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Viga kliendiandmete kuvamisega!", "Viga");
                CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
            }
        }

        private void KuvaFilmView()
        {
            try
            {
                filmadapter.Connection = andmebaas;
                andmebaas.Open();

                DataTable dt = filmadapter.GetFilmView();
                listView4.DataContext = dt.DefaultView;

                andmebaas.Close();
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Viga andmebaasiga, filme ei saa kuvada!", "Viga!");

                String src;
                String msg;
                src = "Source: " + ex.Source;
                msg = "Message: " + ex.Message;
                CLogger.WriteLog(ELogLevel.ERROR, src);
                CLogger.WriteLog(ELogLevel.ERROR, msg);
                CLogger.WriteLog(ELogLevel.ERROR, "Viga filmide kuvamisega.");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Viga filmide kuvamisega!", "Viga");
                CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
            }
        }

        private void KuvaLaenutused()
        {

            try
            {
                laenutusadapter.Connection = andmebaas;
                andmebaas.Open();

                DataTable dt = laenutusadapter.GetLaenutused();
                listView5.DataContext = dt.DefaultView;

                andmebaas.Close();
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Viga andmebaasiga, laenutusi ei saa kuvada!", "Viga!");

                String src;
                String msg;
                src = "Source: " + ex.Source;
                msg = "Message: " + ex.Message;
                CLogger.WriteLog(ELogLevel.ERROR, src);
                CLogger.WriteLog(ELogLevel.ERROR, msg);
                CLogger.WriteLog(ELogLevel.ERROR, "Viga laenutuste kuvamisega.");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Viga laenutuste kuvamisega!", "Viga");
                CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
            }
        }

        private void RefreshData()
        {
                KuvaAndmed();
                KuvaFilmid();
                KuvaFilmView();
                KuvaKlientView();
                KuvaLaenutused();
                KuvaTop();
                KuvaHapudaenutused();
        }
        private void KuvaTop()
        {
            try
            {
                stat.Connection = andmebaas;
                andmebaas.Open();

                DataTable dt = stat.HangiTopLaenutused();
                listView6.DataContext = dt.DefaultView;

                andmebaas.Close();
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Viga andmebaasiga, topi ei saa kuvada", "Viga!");

                String src;
                String msg;
                src = "Source: " + ex.Source;
                msg = "Message: " + ex.Message;
                CLogger.WriteLog(ELogLevel.ERROR, src);
                CLogger.WriteLog(ELogLevel.ERROR, msg);
                CLogger.WriteLog(ELogLevel.ERROR, "Viga top filmide kuvamisega.");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Viga top filmide kuvamisel", "Viga");
                CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
            }
        }

        private void KuvaHapudaenutused()
        {

            try
            {
                stat.Connection = andmebaas;
                andmebaas.Open();

                DataTable dt = stat.HangiHapudLaenutused();
                listView7.DataContext = dt.DefaultView;

                andmebaas.Close();
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Viga andmebaasiga, üleaja laenutusi ei saa kuvada!", "Viga!");

                String src;
                String msg;
                src = "Source: " + ex.Source;
                msg = "Message: " + ex.Message;
                CLogger.WriteLog(ELogLevel.ERROR, src);
                CLogger.WriteLog(ELogLevel.ERROR, msg);
                CLogger.WriteLog(ELogLevel.ERROR, "Viga laenutuste kuvamisega.");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Viga laenutuste kuvamisega!", "Viga");
                CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
            }
        }


        private void lisa_klient_Click(object sender, RoutedEventArgs e)
        {
            string enimi = eesnimi.Text.ToString();
            string pnimi = perenimi.Text.ToString();
            string email = mail.Text.ToString();
            //kontrolli kas textbox väärtus vastab ootustele
            if (!(eesnimi.NimiIsValid()))
            {
                CLogger.WriteLog(ELogLevel.WARN, "Klienti ei saa lisada, eesnimi on tühi või sisaldab erimärke!");
                return;
            }
            //kontrolli kas textbox väärtus vastab ootustele
            if (!(perenimi.NimiIsValid()))
            {
                CLogger.WriteLog(ELogLevel.WARN, "Klienti ei saa lisada, perekonnanimi on tühi või sisaldab erimärke!");
                return;
            }
            //kontrolli kas textbox väärtus vastab ootustele
            if (!(mail.emailIsValid()))
            {
                CLogger.WriteLog(ELogLevel.WARN, "Klienti ei saa lisada, email ei ole õiges formaadis!");
                return;
            }
            else
            {
                try
                {
                    klientadapter.Connection = andmebaas;
                    andmebaas.Open();
                    Int32 id = Convert.ToInt32(klientadapter.Unikaalne()) + 1;
                    klientadapter.LisaKlient(enimi, pnimi, email, id);
                    //MessageBox.Show("Lisatud");
                    andmebaas.Close();
                    RefreshData();
                    eesnimi.Clear();
                    perenimi.Clear();
                    mail.Clear();

                    CLogger.WriteLog(ELogLevel.INFO, "Andmebaasi lisati klient: " + id + " " + enimi + " " + pnimi + " " + email);
                }
                catch (SqlException ex)
                {
                    MessageBox.Show("Viga andmebaasiga, klienti ei lisatud!", "Viga!");

                    String src;
                    String msg;
                    src = "Source: " + ex.Source;
                    msg = "Message: " + ex.Message;
                    CLogger.WriteLog(ELogLevel.ERROR, src);
                    CLogger.WriteLog(ELogLevel.ERROR, msg);
                    CLogger.WriteLog(ELogLevel.ERROR, "Viga kliendi andmebaasi lisamisega.");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Viga kliendi lisamisel", "Viga");
                    CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
                }
            }
        }

        private void button_Clear(object sender, RoutedEventArgs e)
        {
            eesnimi.Text = "";
            perenimi.Text = "";
            mail.Text = "";
            id.Text = "";
        }

        private void button_Kustuta(object sender, RoutedEventArgs e)
        {

            string kliendi_id = id.Text.ToString();
            string enimi = eesnimi.Text.ToString();
            string pnimi = perenimi.Text.ToString();
            string email = mail.Text.ToString();

            if (string.IsNullOrWhiteSpace(kliendi_id))
            {
                MessageBox.Show("Vali klient!");
                CLogger.WriteLog(ELogLevel.WARN, "Klienti prooviti kustutada klienti valimata.");
                return;
            }
                try
                {
                    klientadapter.Connection = andmebaas;
                    andmebaas.Open();

                    int klient = Convert.ToInt32(kliendi_id);
                    DataTable s = klientadapter.KontrolliKustutamist(klient);
                    if (s.Rows.Count == 0)
                    {
                        klientadapter.KustutaKlient(klient);
                        //MessageBox.Show("Kustutatud");
                        andmebaas.Close();
                        RefreshData();
                        id.Clear();
                        eesnimi.Clear();
                        perenimi.Clear();
                        mail.Clear();
                        CLogger.WriteLog(ELogLevel.INFO, "Andmebaasist kustutati klient: " + kliendi_id + " " + enimi + " " + pnimi + " " + email);
                    }
                    else
                    {
                        MessageBox.Show("Kliendil aktiivne laenutus!");
                        CLogger.WriteLog(ELogLevel.INFO, "Klienti " + enimi + " " + pnimi + " ei saa kustutada, kuna kliendil on aktiivne laenutus!");
                    }
                }

                catch (SqlException ex)
                {
                    MessageBox.Show("Viga andmebaasiga, klienti ei kustutatud!", "Viga!");

                    String src;
                    String msg;
                    src = "Source: " + ex.Source;
                    msg = "Message: " + ex.Message;
                    CLogger.WriteLog(ELogLevel.ERROR, src);
                    CLogger.WriteLog(ELogLevel.ERROR, msg);
                   
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Viga andmete kustutamisel", "Viga");
                    CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
 
                }
                andmebaas.Close();
            }
            
        
        private void Muuda_Click(object sender, RoutedEventArgs e)
        {

            string enimi = eesnimi.Text.ToString();
            string pnimi = perenimi.Text.ToString();
            string email = mail.Text.ToString();
            string kliendi_id = id.Text.ToString();

            //kontrolli kas textbox väärtus vastab ootustele
            if (!(eesnimi.NimiIsValid()))
            {
                CLogger.WriteLog(ELogLevel.WARN, "Kliendi andmeid ei saa muuta, eesnimi " + enimi + " on tühi või sisaldab erimärke!");
                return;
            }
            //kontrolli kas textbox väärtus vastab ootustele
            if (!(perenimi.NimiIsValid()))
            {
                CLogger.WriteLog(ELogLevel.WARN, "Kliendi andmeid ei saa muuta, perekonnanimi " + pnimi + " on tühi või sisaldab erimärke!");
                return;
            }
            //kontrolli kas textbox väärtus vastab ootustele
            if (!(mail.emailIsValid()))
            {
                CLogger.WriteLog(ELogLevel.WARN, "Kliendi andmeid ei saa muuta, e-mail-i " + email + " formaat on vale");
                return;
            }
  
                try
                {

                    klientadapter.Connection = andmebaas;
                    andmebaas.Open();

                    int klient = Convert.ToInt32(kliendi_id);
                    DataTable s = klientadapter.KontrolliMuutmist(klient);
                    if (s.Rows.Count != 0)
                    {

                        klientadapter.MuudaKlienti(enimi, pnimi, email, klient);
                        //MessageBox.Show("Muudetud");
                        andmebaas.Close();
                        RefreshData();
                        eesnimi.Clear();
                        perenimi.Clear();
                        mail.Clear();
                        id.Clear();
                        CLogger.WriteLog(ELogLevel.INFO, "Andmebaasis muudeti klienti: " + kliendi_id + " " + enimi + " " + pnimi + " " + email);
                    }
                    else
                    {
                        throw new Exception("Pole sellist klienti");
                    }
                }
                catch (SqlException ex)
                {
                    MessageBox.Show("Viga andmebaasiga, kliendi andmeid ei muudetud!", "Viga!");

                    String src;
                    String msg;
                    src = "Source: " + ex.Source;
                    msg = "Message: " + ex.Message;
                    CLogger.WriteLog(ELogLevel.ERROR, src);
                    CLogger.WriteLog(ELogLevel.ERROR, msg);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Viga andmete muutmisel", "Viga");
                    CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
                   
                }
                andmebaas.Close();
            }
        

        private void button_Otsi(object sender, RoutedEventArgs e)
        {

            string enimi = eesnimi.Text.ToString();
            string pnimi = perenimi.Text.ToString();
            string email = mail.Text.ToString();

            try
            {
                klientadapter.Connection = andmebaas;
                andmebaas.Open();

                DataTable dt = klientadapter.OtsiKlient(enimi, pnimi, email);
                listView1.DataContext = dt.DefaultView;

                andmebaas.Close();
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Viga andmebaasiga!", "Viga!");

                String src;
                String msg;
                src = "Source: " + ex.Source;
                msg = "Message: " + ex.Message;
                CLogger.WriteLog(ELogLevel.ERROR, src);
                CLogger.WriteLog(ELogLevel.ERROR, msg);
                CLogger.WriteLog(ELogLevel.ERROR, "Viga kliendi otsimisega.");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Viga kliendi otsimisel", "Viga");
                CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
            }
            
        }

        private void reset_klient()    {
            eesnimi.Text = null;
            perenimi.Text = null;
            mail.Text = null;
            id.Text = null;

    }

        private void reset_film()
        {
            filmi_nimi.Text = null;
            filmi_aasta.Text = null;
            filmi_id.Text = null;
            filmi_zanr.Text = null;

        }

        private void resetklient_Click(object sender, RoutedEventArgs e)
        {
            KuvaAndmed();
            reset_klient();
        }

        private void resetfilm_Click(object sender, RoutedEventArgs e)
        {
            KuvaFilmid();
            reset_film();

        }

        private void lisa_film_click(object sender, RoutedEventArgs e)
        {

            string fnimi = filmi_nimi.Text.ToString();
            string aasta = filmi_aasta.Text.ToString();
            string zanr = filmi_zanr.Text.ToString();

            //kontrolli kas textbox väärtus vastab ootustele
            if (!(filmi_nimi.FilmIsValid()))
            {
                CLogger.WriteLog(ELogLevel.WARN, "Filmi ei saa lisada, nimi " + fnimi + " on tühi!");
                return;
            }
            //kontrolli kas textbox väärtus vastab ootustele
            if (!(filmi_aasta.aastaIsValid()))
            {
                CLogger.WriteLog(ELogLevel.WARN, "Filmi ei saa lisada, aasta " + aasta + " ei vasta nõuetele!");
                return;
            }
            else
            {
                try
                {
                    filmadapter.Connection = andmebaas;
                    andmebaas.Open();
                    Int32 id = Convert.ToInt32(filmadapter.Unikaalne()) + 1;
                    int aastaa = Convert.ToInt32(aasta);
    
                    filmadapter.LisaFilm(id, fnimi, zanr,aastaa);
                    //MessageBox.Show("Lisatud");
                    andmebaas.Close();
                    RefreshData();
                    filmi_nimi.Clear();
                    filmi_aasta.Clear();
                    filmi_zanr.Clear();
                    filmi_id.Clear();
                    CLogger.WriteLog(ELogLevel.INFO, "Andmebaasi lisati film: " + fnimi + " " + aasta + " " + zanr);
                }
                catch (SqlException ex)
                {
                    MessageBox.Show("Viga andmebaasiga, filmi ei lisatud!", "Viga!");

                    String src;
                    String msg;
                    src = "Source: " + ex.Source;
                    msg = "Message: " + ex.Message;
                    CLogger.WriteLog(ELogLevel.ERROR, src);
                    CLogger.WriteLog(ELogLevel.ERROR, msg);
                    CLogger.WriteLog(ELogLevel.ERROR, "Viga filmi andmebaasi lisamisega.");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Viga filmi lisamisel", "Viga");
                    CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
                }
            }
        }

        private void muuda_film_click(object sender, RoutedEventArgs e)
        {
            string fnimi = filmi_nimi.Text.ToString();
            string aasta = filmi_aasta.Text.ToString();
            string zanr = filmi_zanr.Text.ToString();
            string fid = filmi_id.Text.ToString();

            //kontrolli kas textbox väärtus vastab ootustele
            if (!(filmi_nimi.FilmIsValid()))
            {
                CLogger.WriteLog(ELogLevel.WARN, "Filmi ei saa muuta, filmi nimi on tühi.");
                return;
            }
            //kontrolli kas textbox väärtus vastab ootustele
            if (!(filmi_aasta.aastaIsValid()))
            {
                CLogger.WriteLog(ELogLevel.WARN, "Filmi ei saa muuta, aasta " + aasta + " ei vasta nõuetele.");
                return;
            }
            //kontrolli kas textbox väärtus sisaldab midagi ja ei ole tühi
            if (string.IsNullOrWhiteSpace(fid))
            {
                CLogger.WriteLog(ELogLevel.WARN, "Filmi ei saa muuta, filmi id on tühi.");
                return;
            }
               try
                {

                    filmadapter.Connection = andmebaas;
                    andmebaas.Open();

                    int film = Convert.ToInt32(fid);
                    //int filmaasta = Convert.ToInt32(aasta);
                    DataTable s = filmadapter.KontrolliMuutmist(film);
                    if (s.Rows.Count != 0)
                    {
                        int aastaa = Convert.ToInt32(aasta);
                        filmadapter.UuendaFilmi(fnimi, zanr, aastaa, film);
                        //MessageBox.Show("Muudetud");
                        andmebaas.Close();
                        RefreshData();
                        filmi_nimi.Clear();
                        filmi_aasta.Clear();
                        filmi_zanr.Clear();
                        filmi_id.Clear();
                        CLogger.WriteLog(ELogLevel.INFO, "Andmebaasis muudeti filmi: " + fid + " " + fnimi + " " + zanr + " " + aasta);
                    }
                    else
                    {
                        throw new Exception("Pole sellist klienti");
                    }
                }
                catch (SqlException ex)
                {
                    MessageBox.Show("Viga andmebaasiga, filmi andmeid ei muudetud!", "Viga!");

                    String src;
                    String msg;
                    src = "Source: " + ex.Source;
                    msg = "Message: " + ex.Message;
                    CLogger.WriteLog(ELogLevel.ERROR, src);
                    CLogger.WriteLog(ELogLevel.ERROR, msg);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Viga andmete muutmisel", "Viga");
                    CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
                   
                }
                andmebaas.Close();
        }

        private void kustuta_film_click(object sender, RoutedEventArgs e)
        {
     
            string nimi = filmi_nimi.Text.ToString();
            string aasta = filmi_aasta.Text.ToString();
            string zanr = filmi_zanr.Text.ToString();
            string fid = filmi_id.Text.ToString();
  
            if (string.IsNullOrWhiteSpace(fid))
            {

                MessageBox.Show("Vali Film!");
                CLogger.WriteLog(ELogLevel.WARN, "Filmi prooviti kustutada ilma seda valimata.");
                return;
            }
                try
                {
                    filmadapter.Connection = andmebaas;
                    andmebaas.Open();

                    int film = Convert.ToInt32(fid);
                    DataTable s = filmadapter.KontrolliKustutamist(film);
                    if (s.Rows.Count == 0)
                    {
                        filmadapter.KustutaFilm(film);
                        //MessageBox.Show("Kustutatud");
                        andmebaas.Close();
                        RefreshData();
                        filmi_nimi.Clear();
                        filmi_aasta.Clear();
                        filmi_zanr.Clear();
                        filmi_id.Clear();
                        CLogger.WriteLog(ELogLevel.INFO, "Andmebaasist kustutati film: " + fid + " " + nimi + " " + aasta + " " + zanr);
                    }
                    else
                    {
                        MessageBox.Show("Film on laenutuses");
                        CLogger.WriteLog(ELogLevel.WARN, "Filmi ei saa kustutada, film on laenutuses.");
                    }
                }

                catch (SqlException ex)
                {
                    MessageBox.Show("Viga andmebaasiga, filmi ei kustutatud!", "Viga!");

                    String src;
                    String msg;
                    src = "Source: " + ex.Source;
                    msg = "Message: " + ex.Message;
                    CLogger.WriteLog(ELogLevel.ERROR, src);
                    CLogger.WriteLog(ELogLevel.ERROR, msg);
                   
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Viga andmete kustutamisel", "Viga");
                    CLogger.WriteLog(ELogLevel.ERROR, ex.Message);

                }
                andmebaas.Close();
        }


        private void otsi_filmi_click(object sender, RoutedEventArgs e)
        {

            string nimi = filmi_nimi.Text.ToString();
            string aasta = filmi_aasta.Text.ToString();
            string zanr = filmi_zanr.Text.ToString();


            stat.Connection = andmebaas;
            andmebaas.Open();

            DataTable dt = stat.OtsiFilmi(nimi, zanr, aasta);
            listView2.DataContext = dt.DefaultView;

            andmebaas.Close();

        }





        private void Laenuta_Click(object sender, RoutedEventArgs e)
        {

            DataRowView IdRow;
            int kid, klient;

            kid = listView3.SelectedIndex;
            IdRow = listView3.Items.GetItemAt(kid) as DataRowView;
            klient = Convert.ToUInt16(IdRow["id"]);

            DataRowView IdFilm;
            int fid, film;

            fid = listView4.SelectedIndex;
            IdFilm = listView4.Items.GetItemAt(fid) as DataRowView;
            film = Convert.ToInt16(IdFilm["film_id"]);

            string klient_laenuta_id = klient.ToString();
            string film_laenuta_id   = film.ToString();
            string tkp = datePicker1.Text.ToString();

            if (!(tkp.LaenutusIsValid()))
            {
            MessageBox.Show("Viga: Kontrolli kas Klient, Film ja Tagastus kuupäev on valitud!");
            return;
            }

            try
            {
                laenutusadapter.Connection = andmebaas;
                andmebaas.Open();
                DataTable ajalugu = laenutusadapter.KontrolliAjalugu(klient);
                andmebaas.Close();
                if (ajalugu.Rows.Count > 0)
                {
                    MessageBoxResult Result = MessageBox.Show("Sellel tegelasel on sutsu sitt laenutusajalugu", "Kas laenutame?", MessageBoxButton.YesNo, MessageBoxImage.Question);
                    switch (Result)
                    {
                        case MessageBoxResult.Yes:
                            break;
                        case MessageBoxResult.No:
                            return;
                    }


                }
                stat.Connection = andmebaas;
                andmebaas.Open();

                DataTable dt = stat.KontrolliLaenutust(klient);
                andmebaas.Close();
                if (dt.Rows.Count > 0)
                {
                    if (dt.Rows[0]["id"].ToString() == klient.ToString())
                        MessageBox.Show("Sellel tegelasel on juba eelnev aktiivne laenutus!");
                }

                stat.Connection = andmebaas;
                andmebaas.Open();


                stat.KontrolliMaxLaenutusi(klient);
                object s = stat.KontrolliMaxLaenutusi(klient);
                andmebaas.Close();
                int summa = Convert.ToInt16(s);


                if (summa > 2)
                {
                    MessageBox.Show("Ahnepäts!");
                    return;
                }
                else
                {

                    laenutusadapter.Connection = andmebaas;
                    andmebaas.Open();

                    Int32 id = Convert.ToInt32(laenutusadapter.Unikaalne()) + 1;

                    laenutusadapter.LisaLaenutus(id, klient, film, Convert.ToDateTime(tkp));
                    laenutusadapter.MuudaFilmiOlekut(film);

                    string filmiNimi = filmadapter.LeiaFilm(film).ToString();
                    string kliendiNimi = klientadapter.LeiaKlient(klient).ToString();

                    MessageBox.Show("Laenutatud");
                    andmebaas.Close();
                    RefreshData();
                    CLogger.WriteLog(ELogLevel.INFO, kliendiNimi + " laenutas filmi \"" + filmiNimi + "\" kuupäevani " + tkp);
                }
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message, "Viga!");
                CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Viga!");
                CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
            }
        }
        

        private void tagasta_click_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                DataRowView LaenRow;
                int lid, laenutus_id;

                lid = listView5.SelectedIndex;
            
                LaenRow = listView5.Items.GetItemAt(lid) as DataRowView;
                laenutus_id = Convert.ToInt16(LaenRow["laenutus_id"]);
                string klient_laenutus_id = laenutus_id.ToString();

                laenutusadapter.Connection = andmebaas;
                andmebaas.Open();
                int laenutus = Convert.ToInt32(laenutus_id);
                DateTime ttkp = System.DateTime.Now;
                laenutusadapter.TagastaFilm(ttkp, laenutus);
                laenutusadapter.MuudaFilmiOlekSaadavaks(laenutus);
                MessageBox.Show("Tagastatud");
                andmebaas.Close();
                RefreshData();
                CLogger.WriteLog(ELogLevel.INFO, "Film tagastatud");
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message, "Viga!");
                CLogger.WriteLog(ELogLevel.ERROR, "Viga tagastamisega: " + ex.Message);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Vali laenutus!", "Viga!");
                CLogger.WriteLog(ELogLevel.ERROR, "Viga laenutuse tagastamisel");
                CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
            }
        }

        private void btn_closeWin_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void DragStart(object sender, MouseButtonEventArgs e)
        {

            this.DragMove();

        }


        private void btn_minWin_Click(object sender, RoutedEventArgs e)
        {
            this.WindowState = WindowState.Minimized;
        }

   
        private void saada_email_click(object sender, RoutedEventArgs e)
        {

            DataRowView LaenRow;
            int lid;
            string email;

            if(listView7.SelectedItem == null)
            {
                MessageBox.Show("Palun vali üle aja läinud tagastus!");
                return;
            }
            lid = listView7.SelectedIndex;
            LaenRow = listView7.Items.GetItemAt(lid) as DataRowView;
            email = Convert.ToString(LaenRow["email"]);

            if (string.IsNullOrWhiteSpace(email))
            {
                MessageBox.Show("Viga maili saatmisel");
            }
            else
            {
                try
                {
                    XDocument xmlDoc = XDocument.Load(".\\EmailData.xml");

                    var data = from emailData in xmlDoc.Descendants("emailData")
                               select new
                               {
                                   User = emailData.Element("User").Value,
                                   Password = emailData.Element("Password").Value,
                                   From = emailData.Element("From").Value,
                                   Host = emailData.Element("Host").Value,
                                   Port = emailData.Element("Port").Value,
                                   Subject = emailData.Element("Subject").Value,
                               };

                    foreach (var emailData in data)
                    {
                        WPFEmailer wpfEmailer = new WPFEmailer();
                        wpfEmailer.User = emailData.User;//"localmoviedatabase";
                        wpfEmailer.Password = emailData.Password;//"localmovie69";
                        wpfEmailer.From = emailData.From;// "localmoviedatabase@gmail.com";
                        wpfEmailer.To = email;
                        wpfEmailer.Host = emailData.Host;// "smtp.gmail.com";
                        wpfEmailer.Port = Convert.ToInt32(emailData.Port);
                        wpfEmailer.Subject = emailData.Subject;// "Kiri";
                        wpfEmailer.Body = email_content.Text.ToString();

                        try
                        {
                            wpfEmailer.SendEmail();
                            email_content.Text = "";
                            MessageBox.Show("Mail saadetud.");
                            CLogger.WriteLog(ELogLevel.INFO, "Kiri hapu laenu kohta saadetud aadressile " + email + " sisuga: " + email_content.Text.ToString());
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Error:" + ex.ToString());
                            CLogger.WriteLog(ELogLevel.ERROR, "Ei saanud kirja saata aadressile " + email);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Viga e-maili andmete lugemisega\n" + ex.Message, "Viga");
                    CLogger.WriteLog(ELogLevel.ERROR, "Viga xml failist e-maili andmete lugemisega, ei saa kirja saata");
                    CLogger.WriteLog(ELogLevel.ERROR, ex.Message);
                }
                
            }
        }

       
        }

       
    }



